#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<unistd.h>
#include<pthread.h>



using namespace std;

#define NUM 4
__thread int g_val=0;

// class ThreadData
// {
// public:
//     ThreadData(int number)
//     {
//         _threadname="thread-"+to_string(number);
//     }
// public:
//     string _threadname;
// };

// string toHex(pthread_t tid)
// {
//     char buf[128];
//     snprintf(buf,sizeof(buf),"0x%x",tid);
//     return buf;

// }
// void* ThreadRoutine(void* args)
// {
//     ThreadData* td=static_cast<ThreadData*>(args);
//     string tid=toHex(pthread_self());
//     pid_t pid=getpid();
//     int i=0;
//     int test_i=0;
//     while(i<3)
//     {
//         cout<<td->_threadname<<" pid: "<<pid<<" tid: "<<tid<<",g_val: "<<g_val<<",&g_val: "<<&g_val<<endl;
//         // cout<<td->_threadname<<" pid: "<<pid<<" tid: "<<tid<<endl;
//         // cout<<td->_threadname<<" pid: "<<pid<<" tid: "<<tid<<",test_i: "<<test_i<<",&test_i: "<<&test_i<<endl;;
//         i++;
//         sleep(1);
//     }
//     delete td;
//     return nullptr;
// }
// int main()
// {
//     vector<pthread_t> tids;

//     //创建多线程
//     for(int i=1;i<=NUM;i++)
//     {
//         pthread_t tid;
//         ThreadData* td=new ThreadData(i);
//         pthread_create(&tid,nullptr,ThreadRoutine,td);
//         tids.push_back(tid);
//         sleep(1);
//     }

//     //等待多线程
//     for(auto tid:tids)
//     {
//         pthread_join(tid,nullptr);
//     }
//     cout<<"main thread wait success"<<endl;

//     return 0;
// }

void* PthreadRoutine(void* args)
{
    int i=0;
    pthread_detach(pthread_self());
    while(i<3)
    {
        cout<<"child thread ,pid: "<<getpid()<<endl;
        i++;
        sleep(1);
    }
    return nullptr;
}
int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,PthreadRoutine,nullptr);
    sleep(1);//确保分离成功

    int n=pthread_join(tid,nullptr);
    printf("n = %d, who = 0x%x, why: %s\n", n, tid, strerror(n));

    return 0;

}
